package day15.FileAndIodemo.FileoutStream;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
//从内存写东西到文件
//输出流就是从内存中输出到 一些文件里面

//os.write(int)写一个字节给文件
//os.write(byte[])写多个字节给文件
//os.write(byte[],int index,int len)对于这么多字节我不全要
public class demo1
{
    public static void main (String[] args) throws Exception
    {
        //建立了一个覆盖输出管道连向文件
        OutputStream os = new FileOutputStream("src/day15/FileAndIodemo/测试.txt");//这种声明方式会默认清空当前文件重新操作
        //如果要追加，后面跟一个true参数就行


        os.write(97);//这个方法就是往文件写一个字节（写一个数字或者字符），提供一个数字（编号），输出一个对应字符给文件
        os.write(98);

        byte[] bytes={99,100,101,99,102};
          os.write(bytes);//也可以往文件里面写一个好多个字符，那只需要提供一个字节数组就行了
         os.write("\r\n".getBytes());//把换行符给文件，多了个\r是应对不同平台兼容性更好
        byte[] bytes2="你好".getBytes();//一个六个字节
        System.out.println(bytes2.length);//输出6
        os.write(bytes2);
        os.write(bytes2,0,2);//从0开始写，只写两个，但是一个中文字符三个字节，他把人家拆开了，编译器肯定蒙了所以乱码了
        //用完流就给关掉//占硬件资源，速度会慢，他是磁盘和内存的管道，磁盘太慢了，会影响内存以至于影响整体性能。释放硬件资源
        os.close();
        OutputStream os2 = new FileOutputStream("src/day15/FileAndIodemo/测试.txt",true);
        os2.write("嗯嗯".getBytes());
        os2.close();
        OutputStream os3 = new FileOutputStream("src/day15/FileAndIodemo/测试.txt");


        List<Student> list = new ArrayList<>();//多态
        //应该去重写学生的equals方法，要不然他怎么对比两个对象是否一样

               list.add(new Student("张三",18));
                list.add(new Student("李四",19));
                list.add(new Student("王五",20));
               list.add(new Student("张三",18));

                Student s1=new Student("张三",18);//重写完equals就不会去比地址了
            list.remove(s1);//删第一个
        list.remove(s1);
            for(Student s:list)
                System.out.println(s.getName()+" "+s.getAge());

    }

}
//创建一个学生类，包含年龄就行
class Student{
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public boolean equals(Object obj)
    {
      //  if(this.getAge()==obj.getAge() && this.getName().equals(obj.getName()))return true;
      if(obj==null)return false;

        //if(this==obj)return true;//我没有重写完equals方法，这个还是比地址，看看是否是同一个对象
        Student st = (Student) obj;
        if(this.getAge()==st.getAge() && this.getName().equals(st.getName()))return true;

       return false;
    }
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
